#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
class hld{
  private:
    int n;
    vector<int> f,e,d,h,l,t;
  public:
    hld(vector<vector<int> > g){
      n=g.size(),f.resize(n),e.resize(n,1),d.resize(n);
      h.resize(n,-1),l.resize(n),t.resize(n);
      function<void(int,int)> dfs=[&](int u,int p){
        int mx=0;
        for(int i:g[u])
          if(i!=p){
            f[i]=u,d[i]=d[u]+1;
            dfs(i,u),e[u]+=e[i];
            if(e[i]>mx)mx=e[i],h[u]=i;
          }
      };
      int o=0;
      function<void(int,bool)> decomp=[&](int u,bool b){
        t[u]=(b?t[f[u]]:u),l[u]=o++;
        if(~h[u])decomp(h[u],true);
        for(int i:g[u])
          if(i!=f[u]&&i!=h[u])decomp(i,false);
      };
      dfs(0,0),decomp(0,false);
    }
    inline int lca(int u,int v){
      while(t[u]!=t[v]){
        if(d[t[u]]>d[t[v]])swap(u,v);
        v=f[t[v]];
      }
      return d[u]<d[v]?u:v;
    }
};
int main(){
  freopen("escape.in","r",stdin);
  freopen("escape.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int n,m; cin>>n>>m;
  vector<vector<int> > g(n);
  for(int i=1;i<n;i++){
    int f; cin>>f;
    g[f-1].emplace_back(i);
  }
  vector<int> a(n);
  for(auto &i:a)cin>>i,i--;
  if(max(n,m)<=100){
    hld h(g);
    while(m--){
      int l,r; cin>>l>>r,l--;
      set<int> s(a.begin()+l,a.begin()+r);
      for(int i=l;i<r;i++)
        for(int j=i+1;j<r;j++)
          s.emplace(h.lca(a[i],a[j]));
      cout<<s.size()<<'\n';
    }
  }
  return 0;
}